package yc.tool.dbmigrate.dao;

import java.sql.PreparedStatement;
import java.util.List;
import java.util.Map;

import yc.tool.dbmigrate.entity.TableInfo;

public interface ICommonDao {
	
	void init();
	
	/**
	 * 查看表数据数量（源数据库）
	 * @param tableInfo
	 * @return
	 * @throws Exception
	 */
	Integer tableSize(TableInfo tableInfo) throws Exception;

	/**
	 * 查询一页数据（源数据库）
	 * @param tableInfo
	 * @param pageNumber
	 * @param pageSize
	 * @return
	 * @throws Exception
	 */
	List<Map<String, Object>> selectOnePageData(TableInfo tableInfo, Integer pageNumber, Integer pageSize) throws Exception;
	
	/**
	 * 批量插入数据（目标数据库）
	 * @param tableInfo
	 * @param data
	 * @throws Exception
	 */
	void insertDataBat(TableInfo tableInfo, List<Map<String, Object>> data, String sourceDbType) throws Exception;
	
	/**
	 * 处理sql中的关键字
	 * @param fieldName
	 * @return
	 * @throws Exception
	 */
	String handleKeyWordInSql(String fieldName) throws Exception;
	
	/**
	 * 为插入操作设置参数(数据itemData来自sqlserver查询结果)
	 * @param ps
	 * @param itemData
	 * @param tableInfo
	 * @throws Exception
	 */
	void handleParamsForInsertFromSqlserver(PreparedStatement ps, Map<String, Object> itemData, TableInfo tableInfo) throws Exception;

	/**
	 * 为插入操作设置参数(数据itemData来自Oracle查询结果)
	 * @param ps
	 * @param itemData
	 * @param tableInfo
	 * @throws Exception
	 */
	void handleParamsForInsertFromOracle(PreparedStatement ps, Map<String, Object> itemData, TableInfo tableInfo) throws Exception;

	/**
	 * 为插入操作设置参数(数据itemData来自Mysql查询结果)
	 * @param ps
	 * @param itemData
	 * @param tableInfo
	 * @throws Exception
	 */
	void handleParamsForInsertFromMysql(PreparedStatement ps, Map<String, Object> itemData, TableInfo tableInfo) throws Exception;
	
	/**
	 * 拼接insert 模板语句。 insert into a(x,x,x) values(?,?,?)
	 * @param tableInfo
	 * @return
	 * @throws Exception
	 */
	String getInsertSqlTemplate(TableInfo tableInfo) throws Exception;
	
}
